package core.jogadores;

import core.arvore.Node;
import core.jogo.Tabuleiro;
import core.redeNeural.RedeNeural;
import core.util.Temporizador;

public class JogadorMutanteArvoreMemoria extends JogadorMutanteArvore{

	private Node melhorFilho;
	
	public JogadorMutanteArvoreMemoria(RedeNeural rede, int profundidadeMax) {
		super(rede, profundidadeMax);
	}
	
	public int[] realizaJogada(int[] casas) {
		Temporizador.getInstancia().iniciarContador();
		Node n = null;
		if(getMelhorFilho() == null){
			n = new Node(true, getRede(), new Tabuleiro(casas), getProfundidadeMax());			
		}else{
			for(Node neto : getMelhorFilho().getFilhos())
				if(isIgual(neto.getTabuleiro().getCasas(),casas)){
					n = neto;
					n.setPai(null);
					break;
				}
			if(n == null)
				n = new Node(true, getRede(), new Tabuleiro(casas), getProfundidadeMax());
		}
		n.getValue(-1);
		setMelhorFilho(n.getMelhorFilho());
		if(n.getMelhorJogada() != null)
			return n.getMelhorJogada().getCasas();
		else
			return null;
	}

	private boolean isIgual(int[] casas, int[] casas2) {
		for(int i = 0; i < 32; i++){
			if(casas[i] != casas2[i])
				return false;
		}
		return true;
	}

	public Node getMelhorFilho() {
		return melhorFilho;
	}

	public void setMelhorFilho(Node melhorFilho) {
		this.melhorFilho = melhorFilho;
	}	

}
